package mall.kotlin.com.kotlinlearn.part


import org.junit.Test as test


class 第一章数据类型 {
    val aBoolean: Boolean = true
    val anotherBoolean: Boolean = false
    val anInt: Int = 5
    val aLong: Long = anInt.toLong()


    @test
    fun Test1() {
        val string: String = "HelloWorld"
        val fromChars: String = String(charArrayOf('H', 'e', 'l', 'l', 'o', 'W', 'o', 'r', 'l', 'd'))
        println(string == fromChars)
        println(string === fromChars)
        val arg1: Int = 1
        val arg2: Int = 1
        println("" + arg1 + "+" + arg2 + "=" + (arg1 + arg2))
        println("$arg1+$arg2 = ${arg1 + arg2}")
        val rawString: String = """
            \t
            \n
        """.trimIndent()
        println(rawString)
        val 我喜欢的妹子: 妹子 = 妹子("温柔", "动人", "甜美")
        println(我喜欢的妹子 is 人)
//        println(NullUnsfae.getName().toString())
    }


    @org.junit.Test
    fun Test2() {
        val name = getName()
        if (name == null) return

        //简化写法
        val name1 = getName() ?: return
        println(name1.length)

        //我们知道value不等于空   使用!!告诉编译器不用担心，我确定value不等于空
        val value: String? = "HelloWorld"
        println(value!!.length)

        val ren: 人 = 人("温柔", "动人", "甜美")
        val meizi: 妹子? = ren as? 妹子//as类似java中的强转   as?表示强转过程中出现问题返回null
        println(meizi)
    }

    //空指针安全
    //?表示可空类型
    fun getName(): String? {
//        return ""
        //不可以return  null
        return null
    }

    //区间
    @org.junit.Test
    fun Test3() {
        val range: IntRange = 0..1024//整型的闭区间 [0,1024]  ..是运算符rangeTo
        val range_exclusive: IntRange = 0 until 1024//整形的半开区间 [0,1023)
        val empty_range: IntRange = 0..-1

        println(empty_range.isEmpty())
        println(range.contains(50))
        println(50 in range)//与上一个等价
        //迭代出所有值
        for (i in range_exclusive) {
            print("$i,")
        }
    }

    //数组
    @org.junit.Test
    fun Test4() {
        val arrayOfInt: IntArray = intArrayOf(1, 3, 5, 7)//基本类型有装箱和拆箱的开销问题
        val arrayOfChar: CharArray = charArrayOf('H', 'e', 'l', 'l', 'o', 'W', 'o', 'r', 'l', 'd')
        val arrayOfString: Array<String> = arrayOf("我", "是", "码农")
        val arrayOfren: Array<人> = arrayOf(妹子("温柔", "动人", "甜美"))

        println(arrayOfInt.size)
        for (i in arrayOfInt) {
            print("$i,")
        }
        //按下标获取
        println(arrayOfInt[2])

        //字符串拼接
        println(arrayOfChar.joinToString { "" })
        println(arrayOfChar.joinToString())

        //切片
        println(arrayOfInt.slice(1..2))
        println(sumNum(1, 2))
    }


}


//类和对象
open class 人(性格: String, 长相: String, 声音: String) {
    val 性格1: String = 性格;

    init {
        println("new 了一个${this.javaClass.getSimpleName()}    性格:$性格，长相:$长相，声音:$声音")
    }

    override fun toString(): String {
        return super.toString()
    }

    fun get性格(): String {
        return 性格1;
    }
}

class 妹子(性格: String, 长相: String, 声音: String) : 人(性格, 长相, 声音)


var sumNum = fun(arg1: Int, arg2: Int) = arg1 + arg2

